fix osReserveHeapMemory block alignment
authorSergei Trofimovich <slyfox@gentoo.org>
Wed, 18 Jul 2018 21:36:58 +0000 (22:36 +0100)
committerIlias Tsitsimpis <iliastsi@debian.org>
Fri, 30 Nov 2018 10:11:18 +0000 (10:11 +0000)
commit65a45f0c834d08acac6126e143687a47abf3216e
treeb33a0e90eb95e5f51e87d78b156c107af0ea5bf7
parentd5b08d5a7b55eb36de7b6248cd5d0c6ecfee1702
fix osReserveHeapMemory block alignment

fix osReserveHeapMemory block alignment

Before the change osReserveHeapMemory() attempted
to allocate chunks of memory via osTryReserveHeapMemory()
not multiple of MBLOCK_SIZE in the following fallback code:

```
    if (at == NULL) {
        *len -= *len / 8;
```

and caused assertion failure:

```
$ make fulltest TEST=T11607 WAY=threaded1
T11607: internal error: ASSERTION FAILED: file rts/posix/OSMem.c, line 457
    (GHC version 8.7.20180716 for riscv64_unknown_linux)

```

The change applies alignment mask before each MBLOCK allocation attempt
and fixes WAY=threaded1 test failures on qemu-riscv64.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: run 'make fulltest WAY=threaded1'

Reviewers: simonmar, bgamari, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4982

Gbp-Pq: Name e175aaf6918bb2b497b83618dc4c270a0d231a1c.patch
rts/posix/OSMem.c